package com.apps.java.javanote02;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class _22集合_Collection {
    /**
     * 集合
     * 	概述：集合类的特点是提供一种存储空间可变的存储模型，存储的数据容量可以随时发生改变。
     *
     * 	集合类体系结构：
     * 		集合：
     * 		1.Collection[单列](接口) :
     * 			1.List[可重复](接口)：
     * 				（1）ArrayList（实现类）
     * 				（2）LinkedList（实现类）
     * 				（3）···（实现类）
     *
     * 			2.Set[不可重复](接口)：
     * 				（1）HashSet（实现类）
     * 				（2）TreeSet（实现类）
     * 				（3）···（实现类）
     *
     * 		2.Map[双列](接口)
     * 			（1）HashMap（实现类）
     * 			（2）···（实现类）
     *
     * 	一、Collection
     * 		概述：
     * 			1.是单列集合的顶层接口，它表示一组对象，这些对象也称为Collection的元素。
     * 			2.JDK不提供此接口的任何直接实现，它提供更具体的子接口(如Set、List)实现。
     *
     * 		1.创建Collection集合的对象
     * 			（1）多态的方式
     * 			（2）具体的实现类ArrayList
     *
     * 		2.常用方法
     * 			方法名						说明
     * 			boolean add(E e)			添加元素
     * 			boolean remove(Object o)	从集合中移除指定的元素
     * 			void clear()				清空集合中的元素
     * 			boolean contains(Object o)	判断集合中是否存在指定的元素
     * 			boolean	isEmpty()			判断集合是否为空
     * 			int size()					集合的长度，也就是集合中元素的个数
     *
     * 		3.集合遍历
     * 			Iterator：迭代器，集合的专用遍历方式
     * 			1.Iterator<E> iterator():返回此集合中元素的迭代器，通过集合的iterator()方法得到
     * 			2.迭代器是通过集合的iterator()方法得到的，所以说它是依赖于集合而存在的。
     * 			3.常用方法
     * 				（1）E next()				返回迭代中的下一个元素
     * 				（2）Boolean hasNext()	如果迭代具有更多元素，则返回true
     *
     * 		4.集合的使用步骤
     * 			1.创建集合对象
     * 			2.添加元素
     * 				（1）添加元素
     * 				（2）添加元素到集合
     * 				（3）合并元素到集合
     * 			3.遍历集合
     * 				（1）通过集合对象获取迭代器对象
     * 				（2）通过迭代器对象的hasNext()方法判断是否还有元素
     * 				（3）通过迭代器的next()方法获取下一个元素
     *
     */

    public static void main(String[] args) {

        //创建Collection集合的对象
        Collection<String> c = new ArrayList<String>();

        //添加元素：Boolean add(E e)
        c.add("张三");
        c.add("王五");
        c.add("李四");
        System.out.println("集合中是否添加了元素：" + c.add("王五"));//调用add方法永远返回true

        //输出集合对象
        System.out.println("添加后：" + c);

        //boolean remove(Object o)：从集合中移除指定的元素
        c.remove("王五");
        System.out.println("删除后：" + c);//如果集合中有两个相同的元素，remove只会删除一个


        //void clear():清空集合中的元素
        c.clear();
        System.out.println("清空后：" + c);

        c.add("张三");
        c.add("李四");
        c.add("王五");

        //boolean contains(Object o):判断集合中是否存在指定的元素
        boolean con = c.contains("张三");
        System.out.println(c);
        System.out.println("集合中是否存在指定的元素：" + con);

        //boolean	isEmpty()判断集合是否为空
        boolean empty = c.isEmpty();
        System.out.println("集合是否为空：" + empty);

        //int size():集合的长度，也就是集合中元素的个数
        int size = c.size();
        System.out.println("集合中的元素个数：" + size);

        //迭代器：Iterator<E> iterator():返回此集合中元素的迭代器，通过集合的iterator()方法得到
        Iterator<String> it = c.iterator();

        //System.out.println("it.next获取的结果：" + it.next());//当调用next方法的次数，超过集合中的元素次数时，会出现运行时异常

        //Boolean hasNext()	如果迭代具有更多元素，则返回true
        System.out.print("用while循环的集合结果：[");
        while(it.hasNext()){
            //System.out.println(it.next());//这样获得元素并不是特别好，有可能元素还要有其他的作用。
            String s = it.next();//通常去获得元素并存储
            System.out.print(s);
        }
        System.out.println("]");

    }
}
